require 'rubygems'
require 'faster_csv'

namespace :load do
  desc "Carga las jearaquias en el sistema"
  task :jerarquias => :environment do
   [Cargo, Subordinado, Par, Superior].map(&:delete_all)
   filename = "#{RAILS_ROOT}/doc/csv/estructura_de_cargos.csv"
   # posicion = 0
   FasterCSV.foreach(filename, :quote_char => '\'' , :col_sep => '|', :row_sep =>:auto, :headers => true ) do |row|

      next if row[0].nil?
      cargo        = Cargo.new()
      cargo.nombre = row[0].strip
      cargo.save
      cargo = cargo.valid? ? cargo : Cargo.find_by_nombre(row[0].strip)

      puts "---------"
      puts "Cargo: #{cargo.nombre}"
      puts "Subordinados: "

      unless row[1] =~ /NINGUNO/
        row[1].split(',').each do |subordinado_nombre|
          subordinado        = Cargo.new
          subordinado.nombre = subordinado_nombre.strip
          unless subordinado.save
            subordinado = Cargo.find_by_nombre(subordinado_nombre.strip)
          end
          puts subordinado.nombre
          Subordinado.create(:cargo_id => cargo.id,    :subordinado_id => subordinado.id)
          Superior.create(:cargo_id    => subordinado.id, :superior_id => cargo.id)
        end
      else
        puts "Ninguno"
      end

      puts "Pares:"
      unless row[2] =~ /NINGUNO/
        row[2].split(',').each do |par_nombre|

          par        = Cargo.new
          par.nombre = par_nombre.strip
          par.save
          # puts "Errors: #{par.errors.full_messages}"
          unless par.valid?
            par = Cargo.find_by_nombre(par_nombre.strip)
            unless par
              puts "par_nombre: #{par_nombre}"
              puts "finded: #{par.inspect} "
            end
          end

          puts par.nombre#_nombre
          Par.create(:cargo_id => cargo.id, :par_id => par.id)
          Par.create(:cargo_id => par.id,   :par_id => cargo.id)
        end
      else
        puts "Ninguno"
      end

      puts "Superior: "
      unless row[3] =~ /NINGUNO/
        row[3].split(',').each do |superior_nombre|

          superior        = Cargo.new
          superior.nombre = superior_nombre.strip
          unless superior.save
            superior = Cargo.find_by_nombre(superior_nombre.strip)
          end

          puts superior_nombre
          # Superior.create(:cargo_id => cargo.id, :superior_id => superior.id)
          # Subordinado.create(:cargo_id => par.id,   :superior_id => cargo.id)
        end
      else
        puts "Ninguno"
      end
    end
   # puts "** Se cargaron #{posicion} jerarquias"
  end
end

